#pragma once

#include <fstream>
#include <sys/stat.h>
#include <string>

//工具类，做报文处理
class Util
{
public:
    //读取并删除报文的第一行
    static void ReadOneLine(std::string& str, std::string* line, const std::string& endline)
    {
        size_t pos = str.find(endline);
        if(pos != std::string::npos)
        {
            *line = str.substr(0, pos);
            str.erase(0, pos);
        }
    }

    //从特定文件读取资源 - 修复版本
    static bool ReadFile(const std::string& filename, std::string* out)
    {
        std::fstream file(filename);
        if(!file.is_open())
        {
            return false;
        }
        //一行一行读取，保持换行符
        std::string line;
        while(std::getline(file, line))
        {
            *out += line + "\n";  // 重要：添加换行符
        }
        file.close();
        return true;
    }

    //计算文件内容的大小
    static ssize_t FileSize(const std::string& filename)
    {
        struct stat ret;
        stat(filename.c_str(), &ret);
        return ret.st_size;
    }

    //判断目标文件的类型
    static std::string FileType(const std::string& filename)
    {
        size_t pos = filename.rfind('.');
        if(pos != std::string::npos)
        {
            std::string suffix = filename.substr(pos + 1);

            if(suffix == "html" || suffix == "htm") return "text/html";
            else if(suffix == "jpg") return "image/jpeg";
            else if(suffix == "png") return "image/png";
        }
        return "";
    }
};